package com.firefly.admin.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.firefly.admin.common.vo.Result;
import com.firefly.admin.monitor.vo.SelectResult;
import com.firefly.admin.system.entity.FySystemWhiteList;
import com.firefly.admin.system.vo.SystemWhiteListQueryVo;
import com.firefly.admin.system.vo.SystemWhiteListStatusUpdateVo;

import java.util.List;
import java.util.Map;

public interface FySystemWhiteListService {

    /**
     * 分页查询系统白名单接口
     *
     * @param systemWhiteListQueryVo 分页查询参数
     * @return 分页列表
     */
    Result<Page<FySystemWhiteList>> getSystemWhiteListPage(SystemWhiteListQueryVo systemWhiteListQueryVo);

    /**
     * 系统白名单信息新增接口
     *
     * @param fySystemWhiteList 系统白名单信息
     * @return 新增结果
     */
    Result<FySystemWhiteList> add(FySystemWhiteList fySystemWhiteList);

    /**
     * 系统白名单信息编辑接口
     *
     * @param fySystemWhiteList 系统白名单信息
     * @return 编辑结果
     */
    Result<FySystemWhiteList> update(FySystemWhiteList fySystemWhiteList);

    /**
     * 系统白名单状态修改接口
     *
     * @param systemWhiteListStatusUpdateVo 系统白名单状态编辑参数
     * @return 操作结果
     */
    Result<String> updateStatus(SystemWhiteListStatusUpdateVo systemWhiteListStatusUpdateVo);

    /**
     * 系统白名单信息删除接口
     *
     * @param whiteListId 白名单ID
     * @return 删除结果
     */
    Result<String> delete(Long whiteListId);

    /**
     * 白名单类型枚举列表查询接口
     *
     * @return 白名单类型列表
     */
    Result<List<SelectResult>> getWhiteListTypeEnumList();

    /**
     * 获取所有可用白名单
     *
     * @return 白名单列表
     */
    List<FySystemWhiteList> getAllWhiteList();

    /**
     * 获取敏感数据白名单可选用户和角色接口
     *
     * @return 可选用户和角色
     */
    Result<Map<String, List<SelectResult>>> getSensitiveDataList();

    /**
     * 通过白名单类型获取白名单列表
     *
     * @param whiteListType 白名单类型
     * @return 白名单列表
     */
    List<FySystemWhiteList> getValueList(String whiteListType);

    /**
     * 刷新redis
     *
     * @param whiteListId 白名单ID
     */
    void refreshWhiteListCache(Long whiteListId);

    /**
     * 查询所有正常状态的白名单
     *
     * @return 正常状态白名单列表
     */
    List<FySystemWhiteList> findAllNormal();
}
